#pragma once

#include <windows.h>

#ifndef IMAPPABLE
#define IMAPPABLE

namespace Mapping
{
  
  enum Status
  {
    MS_Unknown,
    MS_Mapped,
    MS_Unmapped,
  };

  struct Descriptor
  {
    void *pBuffer;
    UINT64 Size;
  };

  class IMappable
  {
  public:
    virtual Mapping::Status GetMappingStatus() { return Mapping::MS_Unknown; };
  };

  class IMapper
  {
  public:
    virtual bool Map( IMappable *pmappable, Descriptor* map )=0; 
    virtual bool Unmap( IMappable *pmappable )=0; 
  };

  class IMap : public IMappable
  {
  public:
    virtual bool Map( Mapping::Descriptor *map )=0; 
    virtual bool Unmap( )=0; 
  };

}

#endif IMAPPABLE